Search K
Appearance
Appearance
onclick 事件:当用户点击 HTML 元素时触发,例如按钮、链接等。onmouseover 事件:当用户将鼠标移动到 HTML 元素上时触发,例如图片、链接等。onmouseout 事件:当用户将鼠标从 HTML 元素上移开时触发,例如图片、链接等。onkeydown 事件:当用户按下键盘上的任意键时触发,例如输入框等。onload 事件:当页面加载完成时触发,例如图片、音频、视频等。onsubmit 事件:当用户提交表单时触发,例如登录、注册等。onscroll 事件:当用户滚动页面时触发,例如滚动条等。onresize 事件:当用户改变浏览器窗口大小时触发,例如响应式网页设计等。
什么是事件监听?
- 就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件。
元素对象.addEventListener("事件类型", 要执行的函数);事件监听三要素是什么?
- 事件源 (谁被触发了)
- 事件类型 (用什么方式触发,点击还是鼠标经过等)
- 事件处理程序(要做什么事情)
addEventListener() 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和【事件回调】,该方法接受三个参数: click、mouseover、keydown 等。元素对象.addEventListener("事件类型", 要执行的函数);addEventListener 方法为 DOM 节点添加事件监听click 事件类型大白话描述:所谓的事件无非就是找个机会(事件触发)调用一个函数(回调函数)。
click、鼠标经过 mouseover 等。<button id="myButton">Click me</button>
<script>
const button = document.querySelector("#myButton");
// 使用了 addEventListener() 方法来将一个点击事件监听器添加到按钮上。
// 当用户点击按钮时,会触发回调函数中的代码,输出 "Button clicked!" 到控制台。
button.addEventListener("click", function () {
console.log("Button clicked!");
});
</script>注意
display:none 隐藏元素 display:block 显示元素<header>
<div class="ad">
<img
src="https://img14.360buyimg.com/cms/jfs/t1/31138/39/20627/7102/643df622F6af8d366/a8552639ef51211f.jpg"
alt="广告图片"
referrerpolicy="no-referrer" />
<button class="close">关闭</button>
</div>
<nav>
<ul>
<li>首页</li>
<li>分类</li>
<li>购物车</li>
<li>我的</li>
</ul>
</nav>
</header>header {
position: relative;
}
.ad {
position: relative;
height: 110px;
background-color: #f5f5f5;
display: block;
}
.ad img {
display: block;
width: 235px;
height: 110px;
margin: 0 auto;
}
.ad .close {
position: absolute;
top: 5px;
right: 5px;
}
nav {
height: 50px;
line-height: 50px;
background-color: #333;
color: #fff;
}
ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
justify-content: space-around;
align-items: center;
font-size: 24px;
}const closeBtn = document.querySelector(".ad .close");
const adBox = document.querySelector(".ad");
closeBtn.addEventListener("click", function () {
adBox.style.display = "none";
});<div class="container">
<h1>随机点名</h1>
<label for="name"
>当前被点名的人员:
<input type="text" id="name" readonly="readonly" />
</label>
<div class="btn">
<button id="start">开始</button>
<button id="stop">结束</button>
</div>
</div>.container {
display: flex;
flex-direction: column;
align-items: center;
margin: 50px auto;
width: 500px;
height: 300px;
border: 1px solid #ccc;
border-radius: 10px;
line-height: 60px;
background-color: #69d2e7;
}
input {
width: 200px;
height: 30px;
border: none;
border-radius: 5px;
background-color: #fff;
text-align: center;
font-size: 22px;
font-weight: 600;
}
.btn {
display: flex;
justify-content: space-around;
width: 400px;
margin-top: 50px;
}
button {
width: 80px;
height: 30px;
line-height: 30px;
border: none;
border-radius: 5px;
cursor: pointer;
}// 定义需要点名的人员名单
const arr = ["马超", "黄忠", "赵云", "关羽", "张飞"];
console.log(arr);
// 获取页面元素
const startBtn = document.querySelector("#start");
const stopBtn = document.querySelector("#stop");
const nameInput = document.querySelector("#name");
// 定义变量
let currentIndex = 0; // 当前被点名的人员在数组中的下标
let timer = 0; // 定时器
// 随机获取数组中的一个元素
function getRandomItem(arr) {
const index = Math.floor(Math.random() * arr.length);
return arr[index];
}
// 点击开始按钮
// startBtn.onclick = function () {
startBtn.addEventListener("click", function () {
// 启动定时器
timer = setInterval(function () {
// 获取随机元素
const item = getRandomItem(arr);
// 将元素展示在文本框中
nameInput.value = item;
}, 100);
// 如果数组中只剩下最后一个元素,禁用开始和结束按钮
if (arr.length === 1) {
// startBtn.disabled = true;
// stopBtn.disabled = true;
startBtn.disabled = stopBtn.disabled = true;
}
});
// 点击结束按钮
stopBtn.onclick = function () {
// 停止定时器
clearInterval(timer);
// 将当前被点名的人员从数组中删除
arr.splice(currentIndex, 1);
console.log(arr);
};事件源.on事件 = function() {}事件源.addEventListener(事件, 事件处理函数)on 方式会被覆盖,addEventListener 方式可绑定多次,拥有事件更多特性,推荐使用。leveladdEventListener 注册事件事件类型指的是用户与网页交互时所触发的事件,如鼠标点击、键盘按键、窗口大小改变等。
鼠标事件是指用户在网页上使用鼠标进行交互时所触发的事件。常见的鼠标事件有以下几种:
click:鼠标单击事件,当用户单击鼠标时触发。dblclick:鼠标双击事件,当用户双击鼠标时触发。mousedown:鼠标按下事件,当用户按下鼠标时触发。mouseup:鼠标松开事件,当用户松开鼠标时触发。mousemove:鼠标移动事件,当用户移动鼠标时触发。mouseover:鼠标移入事件,当用户将鼠标移动到某个元素上时触发。mouseout:鼠标移出事件,当用户将鼠标移出某个元素时触发。mouseenter:鼠标进入事件,当用户将鼠标移动到某个元素上时触发,与 mouseover 不同的是,mouseenter 不会冒泡。mouseleave:鼠标离开事件,当用户将鼠标移出某个元素时触发,与 mouseout 不同的是,mouseleave 不会冒泡。mousewheel:鼠标滚轮事件,当用户使用鼠标滚轮时触发。对于以上鼠标事件,可以通过 addEventListener 方法来为元素添加事件监听器。
const element = document.getElementById("myElement");
element.addEventListener("click", function () {
console.log("clicked");
});在事件监听器中,可以通过 event 对象来获取事件的相关信息。在事件处理程序中,可以访问事件对象,该对象提供与事件相关的信息,例如鼠标位置和按钮状态。
element.addEventListener("mousemove", function (event) {
console.log("mouse X:", event.clientX);
console.log("mouse Y:", event.clientY);
});有时需要在鼠标事件中取消默认行为,例如防止上下文菜单的出现。可以通过在事件处理程序中调用 event.preventDefault() 方法来实现。
element.addEventListener("contextmenu", function (event) {
event.preventDefault();
});通过使用鼠标事件,可以实现各种交互效果,例如拖拽、点击、菜单等。
<div class="carousel">
<div class="carousel-container">
<!-- <div class="carousel-item active">
<img src="https://img1.baidu.com/it/u=1831000000,1831000000&fm=26&fmt=auto&gp=0.jpg" alt="" />
</div> -->
</div>
<div class="carousel-footer">
<div class="carousel-mask"></div>
<div class="carousel-tool">
<a href="https://www.bilibili.com/bangumi/play/ep743775" target="_blank" rel="noopener noreferrer">
<span>XY 密室今日开业!游戏开始!</span>
</a>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
<div class="carousel-buttons">
<button class="prev"><</button>
<button class="next">></button>
</div>
</div>
</div>.carousel {
width: 1000px;
height: 630px;
margin: 0 auto;
overflow: hidden;
position: relative;
}
.carousel .carousel-container {
width: 100%;
height: 550px;
position: relative;
}
.carousel .carousel-container .carousel-item {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.carousel .carousel-container .carousel-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
.carousel .carousel-footer {
width: 100%;
height: 80px;
position: relative;
padding: 12px 12px 0 12px;
}
.carousel .carousel-footer .carousel-mask {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background: linear-gradient(transparent, rgba(0, 0, 0, 0.8));
}
.carousel .carousel-footer .carousel-tool a {
margin: 0;
color: #fff;
font-size: 18px;
margin-bottom: 10px;
text-decoration: none;
}
.carousel .carousel-footer .carousel-tool a:hover {
text-decoration: underline;
}
.carousel .carousel-footer .carousel-tool ul {
margin: 0;
padding: 0;
list-style: none;
display: flex;
flex-wrap: wrap;
align-items: center;
}
.carousel .carousel-footer .carousel-tool ul li {
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #fff;
margin: 10px 5px 0 5px;
opacity: 0.4;
cursor: pointer;
}
.carousel .carousel-footer .carousel-tool ul li.active {
width: 12px;
height: 12px;
opacity: 1;
/* background-color: #ff0000; */
}
.carousel .carousel-footer .carousel-buttons {
position: absolute;
right: 0;
top: 12px;
display: flex;
}
.carousel .carousel-footer .carousel-buttons button {
width: 30px;
height: 30px;
margin-right: 40px;
border-radius: 5px;
border: none;
background-color: rgba(255, 255, 255, 0.1);
color: #fff;
font-size: 20px;
cursor: pointer;
outline: none;
}
.carousel .carousel-footer .carousel-buttons button:hover {
background-color: rgba(255, 255, 255, 0.2);
}const sliderData = [
{
url: "https://s2.loli.net/2023/04/27/KPwgoASjN8r6WQh.webp",
title: "对人类来说会不会太超前了?",
color: "rgb(100, 67, 68)",
},
{
url: "https://s2.loli.net/2023/04/27/Ml13notv94pIjQy.webp",
title: "开启剑与雪的黑暗传说!",
color: "rgb(43, 35, 26)",
},
{
url: "https://s2.loli.net/2023/04/27/8Kxs6wQYcZnOGqk.webp",
title: "真正的 jo 厨出现了!",
color: "rgb(36, 31, 33)",
},
{
url: "https://s2.loli.net/2023/04/27/WvoFmSe95VbPi1J.webp",
title: "李玉刚:让世界通过 B 站看到东方大国文化",
color: "rgb(139, 98, 66)",
},
{
url: "https://s2.loli.net/2023/04/27/4KayHmQTZLhu8Fr.webp",
title: "快来分享你的寒假日常吧~",
color: "rgb(67, 90, 92)",
},
{
url: "https://s2.loli.net/2023/04/27/vuXLiHplRzqsfFY.webp",
title: "哔哩哔哩小年 YEAH",
color: "rgb(166, 131, 143)",
},
{
url: "https://s2.loli.net/2023/04/27/dsouL2A1qQD6K89.webp",
title: "一站式解决你的电脑配置问题!!!",
color: "rgb(53, 29, 25)",
},
{
url: "https://s2.loli.net/2023/04/27/U8ifDI3mAaOTxG1.webp",
title: "谁不想和小猫咪贴贴呢!",
color: "rgb(99, 72, 114)",
},
];
const sliderContainer = document.querySelector(".carousel .carousel-container");
let count = 0;
// 注册 next 点击事件
const next = document.querySelector(".next");
next.addEventListener("click", function () {
count++;
if (count >= sliderData.length) {
count = 0;
}
// 调用复用函数
toggle();
});
// 注册 prev 点击事件
const prev = document.querySelector(".prev");
prev.addEventListener("click", function () {
count--;
if (count < 0) {
count = 7;
}
// 调用复用函数
toggle();
});
// 复用函数
function toggle() {
sliderContainer.innerHTML = "";
let sliderItem = document.createElement("div");
sliderItem.className = "carousel-item";
sliderItemImg = document.createElement("img");
sliderItemImg.src = sliderData[count].url;
sliderItemImg.referrerpolicy = "no-referrer";
sliderItem.appendChild(sliderItemImg);
sliderContainer.appendChild(sliderItem);
const sliderFooter = document.querySelector(".carousel .carousel-footer");
sliderFooter.style.backgroundColor = sliderData[count].color;
const sliderFooterTitle = document.querySelector(".carousel .carousel-footer .carousel-tool a span");
sliderFooterTitle.innerText = sliderData[count].title;
const sliderFooterUl = document.querySelector(".carousel .carousel-footer .carousel-tool ul");
const sliderFooterLi = sliderFooterUl.querySelectorAll("li");
sliderFooterLi.forEach((item, index) => {
if (index === count) {
item.classList.add("active");
} else {
item.classList.remove("active");
}
});
}
// 自动播放
let timer = setInterval(function () {
next.click();
}, 1000);
// 鼠标经过盒子停止播放
const carousel = document.querySelector(".carousel");
carousel.addEventListener("mouseenter", function () {
clearInterval(timer);
});
// 鼠标离开盒子继续播放
carousel.addEventListener("mouseleave", function () {
timer = setInterval(function () {
next.click();
}, 1000);
});键盘事件是指用户在键盘上按下或释放按键时触发的事件。常用的键盘事件包括键盘按下事件(keydown)、键盘释放事件(keyup)和键盘输入事件(keypress)。
keydown:当用户按下键盘上的任意一个键时触发。keydown 事件在按键被按下的瞬间触发,而不是在按键被松开的瞬间触发。在用户长按某个键时,keydown 事件会重复触发。keyup:当用户释放键盘上的任意一个键时触发。keyup 事件在按键被松开的瞬间触发。keypress:当用户按下键盘上的字符键时触发。keypress 事件在按键被按下的瞬间触发,而不是在按键被松开的瞬间触发。keypress 事件只能检测字符键,不能检测功能键(如 Shift、Ctrl、Alt 等)和方向键(如上下左右箭头键)。对于以上键盘事件,可以使用 addEventListener() 方法来为元素添加键盘事件监听器。
// 使用 addEventListener() 方法为 document 元素添加了三个键盘事件监听器,分别对应键盘按下、键盘释放和键盘输入事件
// 在事件处理函数中,可以通过 event 对象获取键盘事件的相关信息,如按下的键位、按键码等
document.addEventListener("keydown", function (event) {
console.log("键盘按下:" + event.key);
});
document.addEventListener("keyup", function (event) {
console.log("键盘释放:" + event.key);
});
document.addEventListener("keypress", function (event) {
console.log("键盘输入:" + event.key);
});焦点事件是指与 HTML 文档中的焦点相关的事件。焦点是指当前被选中的元素,可以通过鼠标或键盘来改变焦点。常见的焦点事件包括:
focus:当元素获得焦点时触发该事件。blur:当元素失去焦点时触发该事件。focusin:当元素或其子元素获得焦点时触发该事件。focusout:当元素或其子元素失去焦点时触发该事件。这些事件可以用于实现一些交互功能,例如在输入框获得焦点时自动弹出键盘,或者在表单提交前检查输入框是否为空等。
// <input type="text">
// 获取输入框元素
const input = document.querySelector("input");
// 绑定 focus 事件
input.addEventListener("focus", function () {
console.log("输入框获得焦点");
});
// 绑定 blur 事件
input.addEventListener("blur", function () {
console.log("输入框失去焦点");
});<div class="search">
<input type="text" placeholder="请输入搜索关键词" />
<ul>
<li><a href="#">全部商品</a></li>
<li><a href="#">小米 11</a></li>
<li><a href="#">小米 10S</a></li>
<li><a href="#">小米笔记本</a></li>
<li><a href="#">小米手机</a></li>
<li><a href="#">黑鲨 4</a></li>
<li><a href="#">空调</a></li>
</ul>
</div>a {
text-decoration: none;
color: #555;
}
.search {
position: relative;
margin: 50px auto;
width: 300px;
}
.search input[type="text"] {
width: 100%;
height: 40px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 20px;
font-size: 16px;
outline: none;
transition: all 0.3s ease-in-out;
}
.search input[type="text"].focus {
border-color: #ff6700;
box-shadow: 0 0 5px #ff6700;
}
.search ul {
position: absolute;
top: 100%;
left: 0;
right: 0;
z-index: 999;
background: #fff;
border: 1px solid #ccc;
border-top: none;
border-radius: 0 0 5px 5px;
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
list-style: none;
padding: 0;
margin: 0;
display: none;
}
.search li {
padding: 10px;
cursor: pointer;
}
.search li:hover {
background: #f5f5f5;
}const input = document.querySelector('.search input[type="text"]');
const ul = document.querySelector(".search ul");
input.addEventListener("focus", function () {
ul.style.display = "block";
input.classList.add("focus");
});
input.addEventListener("blur", function () {
ul.style.display = "none";
input.classList.remove("focus");
});文本事件是指在 HTML 文本元素(如文本框、文本域等)中发生的事件,这些事件可以被 JavaScript 监听和处理。常见的文本事件包括:
input 事件:当用户在一个可编辑的 HTML 元素中输入或粘贴文本时触发。该事件在文本框、文本域、富文本编辑器等元素中经常使用。keydown 事件:当用户按下键盘上的任意键时触发。该事件可以用来捕获用户输入的文本内容。keyup 事件:当用户释放键盘上的任意键时触发。该事件可以用来捕获用户输入的文本内容。change 事件:当可编辑元素的内容发生变化时触发。该事件在文本框、下拉菜单等元素中经常使用。select 事件:当用户选中文本时触发。该事件在文本框、文本域等元素中经常使用。cut、copy、paste 事件:当用户执行剪切、复制、粘贴操作时触发。这些事件可以用来监控用户对文本的操作并进行相应的处理。compositionstart、compositionupdate、compositionend 事件:当用户输入非拉丁字符(如中文、日文、韩文等)时触发。这些事件可以用来处理非拉丁字符的输入和编辑。这些事件可以通过 JavaScript 监听和处理,以实现一些交互效果,例如实时搜索、实时校验输入内容等。
// <input type="text" id="myInput">
const inputElement = document.getElementById("myInput");
// 使用 addEventListener 方法来监听 input 事件
// 当用户在 input 元素中输入或粘贴文本时,会触发该事件,并执行绑定的回调函数
inputElement.addEventListener("input", function (event) {
// 获取 event.target.value 属性来获取用户输入的文本内容,然后进行相应的处理
console.log("Input value changed:", event.target.value);
});文本域.value.length表单事件是指在表单元素上发生的事件,如用户在输入框中输入字符、提交表单等操作。在 JavaScript 中,可以使用事件监听器来捕捉这些事件并执行相应的操作。
常见的表单事件包括:
onsubmit:当用户提交表单时触发。可以在该事件中验证表单数据的有效性,并阻止表单提交或执行提交操作。
<form onsubmit="return validateForm()">
<input type="text" name="username" required />
<input type="password" name="password" required />
<button type="submit">Submit</button>
</form>
<script>
function validateForm() {
// 验证表单数据的有效性
if (/* 验证不通过 */) {
alert("Invalid input!");
return false; // 阻止表单提交
}
// 验证通过,可以执行提交操作
return true;
}
</script>onreset:当用户重置表单时触发。可以在该事件中清空表单数据或执行其他操作。
<form onreset="clearForm()">
<input type="text" name="username" />
<input type="password" name="password" />
<button type="reset">Reset</button>
</form>
<script>
function clearForm() {
// 清空表单数据或执行其他操作
document.querySelector("input[name='username']").value = "";
document.querySelector("input[name='password']").value = "";
}
</script>onchange:当表单元素的值发生改变时触发。可以在该事件中根据用户输入的值进行相应的操作。
<input type="text" name="age" onchange="checkAge()" />
<script>
function checkAge() {
// 根据用户输入的年龄进行相应的操作
var age = parseInt(document.querySelector("input[name='age']").value);
if (age < 18) {
alert("You are too young!");
} else {
alert("Welcome!");
}
}
</script>onfocus:当表单元素获得焦点时触发。可以在该事件中执行一些初始化操作或显示提示信息。
<input type="text" name="username" onfocus="showHint()" />
<div id="hint"></div>
<script>
function showHint() {
// 显示提示信息
document.getElementById("hint").innerHTML = "Please enter your username.";
}
</script>onblur:当表单元素失去焦点时触发。可以在该事件中验证用户输入的值或隐藏提示信息。
<input type="text" name="email" onblur="validateEmail()" />
<div id="error"></div>
<script>
function validateEmail() {
// 验证用户输入的邮箱地址是否合法
var email = document.querySelector("input[name='email']").value;
if (!isValidEmail(email)) {
document.getElementById("error").innerHTML = "Invalid email address!";
} else {
document.getElementById("error").innerHTML = "";
}
}
function isValidEmail(email) {
// 验证邮箱地址是否合法
// ...
}
</script>onkeydown、onkeyup、onkeypress:当用户在表单元素中按下或释放键盘上的按键时触发。可以在这些事件中捕捉用户的输入并执行相应的操作。
<input type="text" name="search" onkeydown="search(event)" />
<script>
function search(event) {
// 捕捉用户输入的搜索关键词并执行搜索操作
if (event.keyCode === 13) {
var keyword = document.querySelector("input[name='search']").value;
searchResults(keyword);
}
}
function searchResults(keyword) {
// 执行搜索操作
// ...
}
</script>onselect:当用户选择表单元素中的一段文本时触发。可以在该事件中获取用户选择的文本并执行相应的操作。
<input type="text" name="text" onselect="copyText()" />
<script>
function copyText() {
// 复制用户选择的文本
var selectedText = window.getSelection().toString();
if (selectedText) {
document.execCommand("copy");
alert("Text copied to clipboard!");
}
}
</script>除了以上常见的表单事件,还有一些其他的事件,如 onload、onunload 等。在使用表单事件时,需要注意事件的兼容性和浏览器的差异性,以确保代码在各种浏览器中都能正常运行。
事件对象是什么?
- 也是个对象,这个对象里有事件触发时的相关信息
事件对象在哪里?
- 在事件绑定的回调函数的第一个参数就是事件对象
js元素.addEventListener("click", function (e) {}1
event、ev、e。// 获取 .box 元素
const box = document.querySelector(".box");
// 添加事件监听
// e 为事件对象
box.addEventListener("click", function (e) {
console.log("任意事件类型被触发后,相关信息会以对象形式被记录下来...");
// 事件回调函数的第 1 个参数即所谓的事件对象
console.log(e);
});event.type
获取当前的事件类型,例如 "click"、"keydown"、"mousemove" 等常见事件。
// <button id="myButton">Click me</button>
// 获取按钮元素
var myButton = document.getElementById("myButton");
// 给按钮添加点击事件处理程序
// 当按钮被点击时,点击事件的 Event 对象将被传递给事件处理程序
myButton.addEventListener("click", function (event) {
// 检查事件类型
if (event.type === "click") {
alert("Button was clicked!");
}
});event.clientX 和 event.clientY
获取光标相对于浏览器可见窗口左上角的位置 (鼠标事件的鼠标指针的 X 和 Y 坐标值)。
// <h1>鼠标位置示例</h1>
// <p>请将鼠标移动到页面中以查看其坐标。</p>
// <p id="coords"></p>
const coordsEl = document.getElementById("coords");
// 使用 addEventListener() 方法来监听 mousemove 事件
// 当鼠标指针在页面上移动时,该事件被触发,并且事件处理程序函数获取鼠标指针的位置,并将其显示在 HTML 文档中
document.addEventListener("mousemove", (event) => {
const x = event.clientX;
const y = event.clientY;
coordsEl.textContent = `当前鼠标坐标:(${x}, ${y})`;
});event.offsetX 和 event.offsetY
获取光标相对于当前 DOM 元素左上角的位置。当鼠标在事件目标元素内移动时,这些值会随之改变。如果鼠标在事件目标元素外部,则 offsetX 和 offsetY 的值将为 undefined。
// <div id="box" style="background-color: red; width: 200px; height: 200px;"></div>
const box = document.getElementById("box");
box.addEventListener("mousemove", (event) => {
// 当鼠标在红色的<div>元素内移动时,控制台将输出鼠标指针相对于<div>元素左上角的偏移量
// 这些值可以用于在鼠标事件的处理函数中执行相应的计算,以便进行特定的动态效果
console.log(`X轴偏移量:${event.offsetX},Y轴偏移量:${event.offsetY}`);
});event.key
key 和 keyCode
event.key 属性
该属性是表示键盘事件对应的实际字符值。对于字母和数字键,它返回字符本身,对于符号键,它返回对应的符号,例如 event.key 可以返回 "a","B","1","!","$" 等等。
此外,event.key 还可以返回一些特殊键的名称,例如 "Enter"、"ArrowUp"、"Escape" 等等。这个属性值不受键盘布局或其他设置的影响,可以方便地处理各种不同的键盘输入。
document.addEventListener("keydown", (event) => {
console.log(`按下了键:${event.key}`);
});event.keyCode 属性:
该属性是表示键盘事件对应的键码值。键码值是一个整数,代表了按下的键在键盘上的位置和编号。不同的键盘布局可能会导致不同的键码值,例如数字键盘和常规键盘的键码值可能不同。
event.keyCode 在过去被广泛使用,但现在已被逐渐废弃。因为它在不同的浏览器和设备上有不同的表现,而且不支持非 ASCII 字符。
document.addEventListener("keydown", (event) => {
console.log(`按下的键码值:${event.keyCode}`);
});总结,event.key 是更好的选择,因为它提供了一个更具语义的方式来表示按下的键。而 event.keyCode 作为一个历史遗留属性,已经不被推荐使用。
keydown 或者 keyup 都可以
- 环境对象 this 是什么?
- 它代表着当前函数运行时所处的环境
- 判断 this 指向的粗略规则是什么?
- 【谁调用,this 就是谁】
this 的指向,可以让我们代码更简洁 this 指代的对象也不同this 就是谁】**是判断 this 指向的粗略规则window. 函数,所以 this 指代 windowJavaScript 中的环境对象 this 是指当前函数执行的上下文。每个函数都有一个关联的 this 值,它在函数内部使用时表示当前函数所在的上下文对象。this 值可以是全局对象、当前函数所属的对象或者是一个新对象。
当函数被调用时,会自动创建一个 this 上下文对象,这个上下文对象绑定到函数的执行过程中。this 值的实际值取决于函数的调用方式和执行环境。
this:在全局上下文中,this 指向全局对象 window。在浏览器环境中,它是 window 对象;在 Node.js 环境中,它是 global 对象。this:在一个对象上调用一个方法时,方法内部的 this 值指向当前对象。例如,假设有一个名为 person 的对象,其中有一个名为 name 的方法,则在该方法中调用 this 将返回 person 对象。this:构造函数的 this 指向正在被构造的实例对象。call() 或 apply() 方法调用的函数中的 this:call() 和 apply() 方法能够让一个非 this 上下文的函数以某个对象的上下文来执行。在调用函数时,可以传递一个对象作为 call() 或 apply() 方法的参数,以代替函数内部的 this。综上所述,this 的值是在函数被调用时动态确定的。在编写代码时,要准确理解函数被调用时的上下文,并正确使用 this 值。
在全局作用域中,this 指向全局对象,对于浏览器中的 JavaScript,这个全局对象是 window。在函数内部,this 的值取决于函数被调用的方式。以下是 this 的一些常见用法和值:
函数作为全局函数被调用时,this 指向全局对象。
function myFunction() {
console.log(this); // window
}
myFunction();函数作为某个对象的方法被调用时,this 指向该对象。
const myObj = {
myMethod() {
console.log(this);
},
};
myObj.myMethod(); // myObj使用 call 或 apply 方法调用函数时,第一个参数指定 this 的值。
function myFunction() {
console.log(this);
}
const myObj = {name: "John"};
myFunction.call(myObj); // myObj当使用箭头函数时,this 指向箭头函数定义时的上下文,而不是运行时的上下文。
const myObj = {
myMethod() {
const myArrowFunc = () => {
console.log(this);
};
myArrowFunc();
},
};
myObj.myMethod(); // myObj
- 回调函数
- 把函数当做另外一个函数的参数传递,这个函数就叫回调函数
- 回调函数本质还是函数,只不过把它当成参数使用
- 使用匿名函数做为回调函数比较常见
在 JS 中,每个函数都是一个对象,并且可以作为参数传递给其他函数,这就为回调函数的实现提供了基础。
function foo(callback) {
// do something...
callback();
}
function bar() {
console.log("Hello World");
}
// 函数 bar() 作为回调函数,在函数 foo() 中被当做参数传递
// 当 foo() 执行完之后,会自动调用 bar() 函数
foo(bar); // 输出:Hello World回调函数不仅可以被用于简单的异步操作,还可以在函数中使用条件语句来判断是否执行回调函数。
// add() 函数中判断了传入的参数 callback 是否为函数,如果是则调用回调函数并将结果传递给它
function add(num1, num2, callback) {
let sum = num1 + num2;
if (typeof callback === "function") {
callback(sum);
}
}
add(1, 2, function (result) {
console.log("The result is " + result);
}); // 输出:The result is 3// fetchData 函数模拟了从服务器获取数据的过程,它在 2 秒后返回一个对象
function fetchData(callback) {
setTimeout(function () {
const data = {name: "John", age: 30};
callback(data);
}, 2000);
}
function processData(data) {
console.log("Name:", data.name);
console.log("Age:", data.age);
}
// 将 processData 函数作为参数传递给 fetchData 函数,这就是回调函数
// 在 fetchData 函数完成后,它将调用回调函数并将获取到的数据作为参数传递给它
fetchData(processData);当用户单击按钮时,可以使用回调函数来处理该事件。
const button = document.querySelector("button");
// 将一个匿名函数作为回调函数传递给 addEventListener 函数,以便在用户单击按钮时调用该函数
button.addEventListener("click", function () {
console.log("Button clicked");
});